package persistencia;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.SQLNonTransientConnectionException;
import java.util.ArrayList;
import java.util.List;
import recursos.Sesion;
import util.Conexion;
import bean.Usuario;;

public class MantenimientoUsuarioDAO {
	
	public int modificar(Usuario objUsuario) throws SQLException{
		PreparedStatement pstm = Conexion.obtenerConexion()
				.prepareStatement("update prodtecni.tusuario set claveusuario = ? ,descripcionusuario = ?,creadorusuario=? ,fechamodica = ?,horamodica = ?,situacion='01' where codigousuario = ?");
		pstm.setString(1, objUsuario.getClave());
		pstm.setString(2, objUsuario.getDescripcion());
		pstm.setString(3, objUsuario.getCreador());
		pstm.setString(4, objUsuario.getFechaModificacion());
		pstm.setString(5, objUsuario.getHoraModificacion());
		pstm.setString(6, objUsuario.getUsuario());
		int result = pstm.executeUpdate();
		pstm.close();
		return result;
	}
	
	public int registrar(Usuario objUsuario) throws SQLException {
		PreparedStatement pstm = Conexion
				.obtenerConexion()
				.prepareStatement(
						""
								+ "insert into prodtecni.tusuario(codigousuario,claveusuario,descripcionusuario,creadorusuario,fechacreacion,horacreacion,situacion) values "
								+ "(?,?,?,?,?,?,?) ");
		pstm.setString(1, objUsuario.getUsuario());
		pstm.setString(2, objUsuario.getClave());
		pstm.setString(3, objUsuario.getDescripcion());
		pstm.setString(4, objUsuario.getCreador());
		pstm.setString(5, objUsuario.getFechaCreacion());
		pstm.setString(6, objUsuario.getHoraCreacion());
		pstm.setString(7, objUsuario.getSituacion());
		int result = pstm.executeUpdate();
		pstm.close();
		return result;
	}
		
	public int eliminar(Usuario objUsuario) throws SQLException{
		PreparedStatement pstm = Conexion.obtenerConexion()
				.prepareStatement("update prodtecni.tusuario set situacion='99' where codigousuario = ? and situacion='01'  ");
		pstm.setString(1, objUsuario.getUsuario());
		int result = pstm.executeUpdate();
		pstm.close();
		return result;
	}

	public String exist(Usuario objUsuario) throws SQLException {
		PreparedStatement pstm = Conexion.obtenerConexion().prepareStatement(
				"Select situacion from prodtecni.tusuario where codigousuario = ?");
		pstm.setString(1, objUsuario.getUsuario());
		ResultSet rs = pstm.executeQuery();
		String result = "";
		if (rs.next()){
			result = rs.getString(1);
		}
		rs.close();
		pstm.close();
		return result;
	}

	public List<Usuario> buscar(Usuario objUsuario) throws SQLException {
		List<Usuario> usuarios = new ArrayList<Usuario>();
		String filtro ="";
		int parametro=0;
		if(!objUsuario.getUsuario().isEmpty()){
			filtro+="and CODIGOUSUARIO like ? ";
		}
		if(!objUsuario.getDescripcion().isEmpty()){
			filtro+="and DESCRIPCIONUSUARIO like ? ";
		}
			
		PreparedStatement pstm = Conexion.obtenerConexion().prepareStatement("select * from prodtecni.tusuario where situacion='01' "+filtro);
		if(!objUsuario.getUsuario().isEmpty()){
			parametro++;
			pstm.setString(parametro, objUsuario.getUsuario()+"%");
		}
		if(!objUsuario.getDescripcion().isEmpty()){
			parametro++;
			pstm.setString(parametro, objUsuario.getDescripcion()+"%");
		}
		ResultSet rs = pstm.executeQuery();
		while(rs.next()){
			Usuario usuario = new Usuario();
			usuario.setClave(rs.getString("CLAVEUSUARIO"));
			usuario.setDescripcion(rs.getString("DESCRIPCIONUSUARIO"));
			usuario.setUsuario(rs.getString("CODIGOUSUARIO"));
			usuarios.add(usuario);
		}
		rs.close();
		pstm.close();
		return usuarios;
	}

	public Usuario validar(Usuario usuario) throws SQLException,SQLNonTransientConnectionException{
		String url = "jdbc:as400://"+Sesion.ip+";prompt=false";
		Connection cn = DriverManager.getConnection(url, usuario.getUsuario(), usuario.getClave());
		cn.close();
		return usuario;
	}

}
